/**
 * @auther yangdong
 * @create 2020-05-06
 *  一方面，有时必须从几个类中派生出一个子类，继承它们所有的属性和方
 * 法。但是，Java不支持多重继承。有了接口，就可以得到多重继承的效果。
 * 另一方面，有时必须从几个类中抽取出一些共同的行为特征，而它们之间又
 * 没有is-a的关系，仅仅是具有相同的行为特征而已。例如：鼠标、键盘、打
 * 印机、扫描仪、摄像头、充电器、MP3机、手机、数码相机、移动硬盘等都
 * 支持USB连接。
 * 接口就是规范，定义的是一组规则，体现了现实世界中“如果你是/要...则
 * 必须能...”的思想。继承是一个"是不是"的关系，而接口实现则是 "能不能"
 * 的关系。
 *  接口的本质是契约，标准，规范，就像我们的法律一样。制定好后大家都
 * 要遵守。
 *
 *  接口(interface)是抽象方法和常量值定义的集合。
 *  接口的特点：
 * 用interface来定义。
 * 接口中的所有成员变量都默认是由public static final修饰的。
 * 接口中的所有抽象方法都默认是由public abstract修饰的。
 * 接口中没有构造器。
 * 接口采用多继承机制。
 *
 *  定义Java类的语法格式：先写extends，后写implements
 *  class SubClass extends SuperClass implements InterfaceA{ }
 *  一个类可以实现多个接口，接口也可以继承其它接口。
 *  实现接口的类中必须提供接口中所有方法的具体实现内容，方可实
 * 例化。否则，仍为抽象类。
 *  接口的主要用途就是被实现类实现。（面向接口编程）
 *  与继承关系类似，接口与实现类之间存在多态性
 *  接口和类是并列关系，或者可以理解为一种特殊的类。从本质上讲，
 * 接口是一种特殊的抽象类，这种抽象类中只包含常量和方法的定义
 * (JDK7.0及之前)，而没有变量和方法的实现。
 */
public class UsbTest {
    public static void main(String[] args) {
        Computer c=new Computer();
        //接口的非匿名实现类的非匿名对象
        Upan upan=new Upan();
        c.shujuchuanshu(upan);
        //非匿名实现类的匿名对象
        Usb usb=new DaYinJi();
        c.shujuchuanshu(usb);
        //匿名实现类的非匿名对象
        Usb usb1=new Usb() {
            @Override
            public void start() {
                System.out.println("手机开始工作");
            }

            @Override
            public void stop() {
                System.out.println("手机结束工作");
            }
        };
        c.shujuchuanshu(usb1);
        //匿名实现类的匿名对象
        c.shujuchuanshu(new Usb() {
            @Override
            public void start() {
                System.out.println("MP3开始工作");
            }

            @Override
            public void stop() {
                System.out.println("mp3结束工作");
            }
        });
        DD d=new DD();
        d.m1();
        d.m2();
        d.m3();
        System.out.println(CC.i+""+CC.j);
    }


}
interface Usb{
    void start();
    void stop();
}
 class Upan implements Usb{

     @Override
     public void start() {
         System.out.println("Upan开始工作");
     }

     @Override
     public void stop() {
         System.out.println("U盘结束工作");
     }
 }
 class DaYinJi implements Usb{

     @Override
     public void start() {
         System.out.println("打印机开始工作");
     }

     @Override
     public void stop() {
         System.out.println("打印机结束工作");
     }
 }
 interface AA{
    public static final int i=10;
    public abstract void m1();
    void m2();
 }
 interface BB{
    int j=2;
    void m3();
 }
 interface CC extends AA,BB{

 }
 class Computer{
        public void shujuchuanshu(Usb usb){
            usb.start();
            System.out.println("数据传输中");
            usb.stop();
        };
    }

/**
 * 接口采用多继承机制。
 */
class DD implements CC{

     @Override
     public void m1() {
         System.out.println(1);
     }

     @Override
     public void m2() {
         System.out.println(2);
     }

     @Override
     public void m3() {
         System.out.println(3);
     }
 }
